Spring Boot ๋ณด์ ๊ธฐ์ด (Spring Security)
์คํ๋ง ๋ถํธ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ธ์ฆ(Authentication)๊ณผ ์ธ๊ฐ(Authorization)๋ฅผ ๋ด๋นํ๋ ํต์ฌ ๋ณด์ ํ๋ ์์ํฌ์ธ Spring Security์ ๊ธฐ์ด ์ค์ ๊ณผ ํ์ฉ๋ฒ์ ์ ๋ฆฌํฉ๋๋ค. 2026๋ ๊ธฐ์ค ์ต์ ๋ณด์ ์ค์ ์ ๋ฐ์ํฉ๋๋ค.
1. Spring Security ๊ฐ์
Spring Security๋ "์ธ์ฆ(๋๊ตฌ์ธ๊ฐ?)"๊ณผ "์ธ๊ฐ(์ด๋ค ๊ถํ์ด ์๋๊ฐ?)"๋ฅผ ์ ์ดํ๋ ๊ฐ๋ ฅํ ๋ณด์ ํ๋ ์์ํฌ์ ๋๋ค. ํํฐ ๊ธฐ๋ฐ์ผ๋ก ์๋ํ๋ฉฐ, ์คํ๋ง ๋ถํธ์ ๊ฒฐํฉํ์ฌ ๋๋ถ๋ถ์ ์ค์ ์ ์๋์ผ๋ก ์ํํด ์ค๋๋ค.
2. ๊ธฐ๋ณธ ์ค์ (Dependencies)
Maven (pom.xml)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>Gradle (build.gradle)
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-security'
}3. ๋ณด์ ์ค์ ์ปค์คํฐ๋ง์ด์ง (SecurityConfig)
์ต์ ์คํ๋ง ์ํ๋ฆฌํฐ๋ WebSecurityConfigurerAdapter ์์ ๋ฐฉ์์ด ์๋, SecurityFilterChain ๋น์ ๋ฑ๋กํ๋ ๋ฐฉ์์ ์ฌ์ฉํฉ๋๋ค.
@Configuration
@EnableWebSecurity
public class SecurityConfig {
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http
.csrf(csrf -> csrf.disable()) // REST API ํ๊ฒฝ์์๋ CSRF ๋นํ์ฑํ ๊ถ์ฅ
.authorizeHttpRequests(auth -> auth
.requestMatchers("/api/public/**").permitAll() // ๋๊ตฌ๋ ์ ๊ทผ ๊ฐ๋ฅ
.requestMatchers("/api/admin/**").hasRole("ADMIN") // ๊ด๋ฆฌ์๋ง ์ ๊ทผ ๊ฐ๋ฅ
.anyRequest().authenticated() // ๋๋จธ์ง๋ ๋ก๊ทธ์ธ ํ์
)
.httpBasic(Customizer.withDefaults()); // ๊ธฐ๋ณธ ์ธ์ฆ ๋ฐฉ์ ์ฌ์ฉ
return http.build();
}
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder(); // ๋น๋ฐ๋ฒํธ๋ ๋ฐ๋์ ์ํธํํ์ฌ ์ ์ฅ
}
}4. ์ฌ์ฉ์ ์ธ์ฆ (InMemoryUser)
ํ
์คํธ ๋ชฉ์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ์ ์ฌ์ฉ์๋ฅผ ๋ฑ๋กํ๋ ๋ฐฉ๋ฒ์
๋๋ค. ์ค๋ฌด์์๋ DB ์ฐ๋(UserDetailsService)์ ์ฌ์ฉํฉ๋๋ค.
@Bean
public UserDetailsService userDetailsService() {
UserDetails user = User.builder()
.username("user")
.password(passwordEncoder().encode("1234"))
.roles("USER")
.build();
return new InMemoryUserDetailsManager(user);
}5. ํต์ฌ ๋ณด์ ๊ฐ๋
- CSRF (Cross-Site Request Forgery): ์ฌ์ดํธ ๊ฐ ์์ฒญ ์์กฐ ๋ฐฉ์ง ๊ธฐ๋ฅ. REST API(State-less) ํ๊ฒฝ์์๋ ์ฃผ๋ก ๋๊ณ ํ ํฐ(JWT ๋ฑ) ๋ฐฉ์์ ์๋๋ค.
- CORS (Cross-Origin Resource Sharing): ๋ค๋ฅธ ๋๋ฉ์ธ(์: React ์ฑ)์์ ๋ฐฑ์๋ API๋ฅผ ํธ์ถํ ์ ์๋๋ก ํ์ฉํ๋ ์ค์ ์ ๋๋ค.
- AuthenticationManager: ์ค์ ์ธ์ฆ ๋ก์ง์ ์ด๊ดํ๋ ํต์ฌ ์ปดํฌ๋ํธ์ ๋๋ค.
6. ์์ฝ
- ์์กด์ฑ ์ถ๊ฐ๋ง์ผ๋ก ๊ธฐ๋ณธ์ ์ธ ๋ณด์์ด ์์๋ฉ๋๋ค.
SecurityFilterChain์ ํตํด ์ธ๋ฐํ ์ ๊ทผ ๊ถํ(์ธ๊ฐ)์ ์ค์ ํฉ๋๋ค.- ๋น๋ฐ๋ฒํธ ์ํธํ๋ ์ ํ์ด ์๋ ํ์์
๋๋ค (
BCrypt).
๋ณด์์ ๊ธฐ๋ฅ์ ์์ฑํ ํ์ ๋ง๋ถ์ด๋ ๊ฒ์ด ์๋๋ผ, ์ค๊ณ ๋จ๊ณ๋ถํฐ ๊ณ ๋ คํด์ผ ํ๋ ํ์ ์์์ ๋๋ค.